package com.ruoyi.common.office;

import org.apache.poi.xslf.usermodel.*;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.List;

public class ReadPPTXDetailFromLocalPath {
    public static void readFile(String filePath) throws IOException {
        // 加载PPTX文件
        FileInputStream fis = new FileInputStream(filePath);
        XMLSlideShow ppt = new XMLSlideShow(fis);

        getFileData(ppt);

        fis.close();
    }

    private static void getFileData(XMLSlideShow ppt) {
        List<XSLFSlide> slides = ppt.getSlides();
        System.out.println("总幻灯片数：" + slides.size());

        // 遍历每张幻灯片
        for (int i = 0; i < slides.size(); i++) {
            XSLFSlide slide = slides.get(i);
            System.out.println("\n===== 幻灯片 " + (i + 1) + " =====");

            // 4. 获取幻灯片中的所有文本框（形状）
            for (XSLFShape shape : slide.getShapes()) {
                // 过滤非文本框形状（如图片、图表等）
                if (!(shape instanceof XSLFTextShape)) {
                    continue;
                }

                XSLFTextShape textShape = (XSLFTextShape) shape;
                // 5. 遍历文本框中的段落
                for (XSLFTextParagraph paragraph : textShape.getTextParagraphs()) {
                    // 6. 遍历段落中的文本片段（Run）
                    StringBuilder paragraphText = new StringBuilder();
                    for (XSLFTextRun run : paragraph.getTextRuns()) {
                        // 获取文本内容
                        String text = run.getRawText();
                        // 获取文本样式（可选）
                        String fontName = run.getFontFamily();
                        int fontSize = run.getFontSize() == null ? 0 : run.getFontSize().intValue();
                        boolean isBold = run.isBold();

                        paragraphText.append(text);
                        // 打印样式（可选）
                        System.out.println("文本：" + text + "，字体：" + fontName + "，大小：" + fontSize + "，加粗：" + isBold);
                    }
                    // 输出段落完整文本
                    if (paragraphText.length() > 0) {
                        System.out.println("" + paragraphText);
                    }
                }
            }
        }
    }
}
